<?php
/**
 * 系统初始化文件
 * 统一引入和配置博客系统
 */

// 引入博客系统核心类
require_once __DIR__ . '/BlogSystem.php';

// 创建全局博客系统实例
$blog = new BlogSystem();

// 设置调试模式（生产环境请设置为false）
// $blog->setDebug(true);  // 开发调试时可开启

// 定义常用的全局函数，方便在模板中使用

/**
 * 页面重定向快捷函数
 * @param string $url 重定向地址
 */
function redirect($url) {
    global $blog;
    $blog->redirect($url);
}

/**
 * HTML转义快捷函数
 * @param string $string 要转义的字符串
 * @return string 转义后的字符串
 */
function escape($string) {
    global $blog;
    return $blog->htmlEscape($string);
}

/**
 * 格式化日期快捷函数
 * @param string $datetime 日期时间
 * @param string $format 格式
 * @return string 格式化后的日期
 */
function formatDate($datetime, $format = 'Y-m-d H:i') {
    global $blog;
    return $blog->formatDate($datetime, $format);
}

/**
 * 生成摘要快捷函数
 * @param string $content 文章内容
 * @param int $length 摘要长度
 * @return string 文章摘要
 */
function getExcerpt($content, $length = 200) {
    global $blog;
    return $blog->getExcerpt($content, $length);
}

/**
 * 检查用户是否已登录
 * @return bool 是否已登录
 */
function isLoggedIn() {
    global $blog;
    return $blog->isLoggedIn();
}

/**
 * 获取当前用户信息
 * @return array|null 用户信息或null
 */
function getCurrentUser() {
    global $blog;
    return $blog->getCurrentUser();
}

/**
 * 显示成功消息
 * @param string $message 消息内容
 */
function showSuccess($message) {
    echo "<div class='alert alert-success'>" . escape($message) . "</div>";
}

/**
 * 显示错误消息
 * @param string $message 消息内容
 */
function showError($message) {
    echo "<div class='alert alert-error'>" . escape($message) . "</div>";
}

/**
 * 显示警告消息
 * @param string $message 消息内容
 */
function showWarning($message) {
    echo "<div class='alert alert-warning'>" . escape($message) . "</div>";
}

/**
 * 显示信息消息
 * @param string $message 消息内容
 */
function showInfo($message) {
    echo "<div class='alert alert-info'>" . escape($message) . "</div>";
}

/**
 * 生成基础URL
 * @param string $path 路径
 * @return string 完整URL
 */
function baseUrl($path = '') {
    global $blog;
    $baseUrl = $blog->getConfig('base_url');
    return $baseUrl . ltrim($path, '/');
}

/**
 * 生成资源URL
 * @param string $path 资源路径
 * @return string 完整URL
 */
function assetUrl($path) {
    return baseUrl('assets/' . ltrim($path, '/'));
}

/**
 * 生成上传图片URL
 * @param string $path 图片路径
 * @return string 完整URL
 */
function imageUrl($path) {
    if (empty($path)) return '';
    return baseUrl($path);
}

/**
 * 分页函数
 * @param int $currentPage 当前页码
 * @param int $totalPages 总页数
 * @param string $baseUrl 基础URL
 * @return string 分页HTML
 */
function pagination($currentPage, $totalPages, $baseUrl) {
    if ($totalPages <= 1) {
        return '';
    }
    
    $html = '<div class="pagination">';
    
    // 上一页
    if ($currentPage > 1) {
        $prevPage = $currentPage - 1;
        $html .= "<a href='{$baseUrl}?page={$prevPage}' class='page-btn'>上一页</a>";
    }
    
    // 页码
    $start = max(1, $currentPage - 2);
    $end = min($totalPages, $currentPage + 2);
    
    if ($start > 1) {
        $html .= "<a href='{$baseUrl}?page=1' class='page-btn'>1</a>";
        if ($start > 2) {
            $html .= "<span class='page-dots'>...</span>";
        }
    }
    
    for ($i = $start; $i <= $end; $i++) {
        if ($i == $currentPage) {
            $html .= "<span class='page-btn active'>{$i}</span>";
        } else {
            $html .= "<a href='{$baseUrl}?page={$i}' class='page-btn'>{$i}</a>";
        }
    }
    
    if ($end < $totalPages) {
        if ($end < $totalPages - 1) {
            $html .= "<span class='page-dots'>...</span>";
        }
        $html .= "<a href='{$baseUrl}?page={$totalPages}' class='page-btn'>{$totalPages}</a>";
    }
    
    // 下一页
    if ($currentPage < $totalPages) {
        $nextPage = $currentPage + 1;
        $html .= "<a href='{$baseUrl}?page={$nextPage}' class='page-btn'>下一页</a>";
    }
    
    $html .= '</div>';
    
    return $html;
}

/**
 * 获取文章分类
 * @param int $articleId 文章ID
 * @return array 分类数组
 */
function getArticleCategories($articleId) {
    global $blog;
    return $blog->getArticleCategories($articleId);
}

/**
 * 获取文章标签
 * @param int $articleId 文章ID
 * @return array 标签数组
 */
function getArticleTags($articleId) {
    global $blog;
    return $blog->getArticleTags($articleId);
}

/**
 * 获取文章总数
 * @param array $conditions 查询条件
 * @return int 文章总数
 */
function getArticleCount($conditions = []) {
    global $blog;
    return $blog->getArticleCount($conditions);
}

/**
 * 获取所有分类
 * @return array 分类数组
 */
function getAllCategories() {
    global $blog;
    return $blog->getCategories();
}

/**
 * 获取所有标签
 * @return array 标签数组
 */
function getAllTags() {
    global $blog;
    return $blog->getTags();
}

/**
 * 生成文章图片占位符
 * @param int $articleId 文章ID
 * @return string 图片HTML或占位符
 */
function getArticleImage($articleId) {
    // 根据文章ID生成不同的图标
    $icons = ['📝', '💡', '🚀', '⭐', '🎯', '📚', '🔥', '💎', '🌟', '🎨'];
    $icon = $icons[$articleId % count($icons)];
    return $icon;
}

/**
 * 检查并处理POST请求
 * @param string $action 操作名称
 * @return bool 是否是指定的POST请求
 */
function isPost($action = null) {
    if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
        return false;
    }
    
    if ($action === null) {
        return true;
    }
    
    return isset($_POST[$action]);
}

/**
 * 获取POST数据
 * @param string $key 键名
 * @param mixed $default 默认值
 * @return mixed 数据值
 */
function getPost($key, $default = '') {
    return isset($_POST[$key]) ? $_POST[$key] : $default;
}

/**
 * 获取GET数据
 * @param string $key 键名
 * @param mixed $default 默认值
 * @return mixed 数据值
 */
function getGet($key, $default = '') {
    return isset($_GET[$key]) ? $_GET[$key] : $default;
}

/**
 * 生成CSRF令牌
 * @return string CSRF令牌
 */
function generateCSRFToken() {
    if (!isset($_SESSION['csrf_token'])) {
        $_SESSION['csrf_token'] = bin2hex(random_bytes(32));
    }
    return $_SESSION['csrf_token'];
}

/**
 * 验证CSRF令牌
 * @param string $token 提交的令牌
 * @return bool 验证是否通过
 */
function verifyCSRFToken($token) {
    return isset($_SESSION['csrf_token']) && hash_equals($_SESSION['csrf_token'], $token);
}

/**
 * 输出CSRF隐藏字段
 */
function csrfField() {
    $token = generateCSRFToken();
    echo "<input type='hidden' name='csrf_token' value='{$token}'>";
}

// 初始化完成提示
// echo "<!-- 博客系统初始化完成 -->\n";
?> 